#include <my_header.h>
// 使用**shmctl函数**可以用于对共享内存段执行多种操作。
// 根据参数的不同，可以执行不同的操作。 (man shmctl)
/* Usage: ./1_shmctl */
int main(int argc, char *argv[]){   
    // 1.生产标识
    key_t keytag = ftok("./2_shmctl.c", 100);
    ERROR_CHECK(keytag, -1, "ftok");
    printf("key_t :%d\n", keytag);

    //2. 创建共享内存 shmid:共享内存标识
    int shmid = shmget(keytag, 4096, 0666 | IPC_CREAT);
    ERROR_CHECK(shmid, -1, "shmid");
    printf("shmid :%d\n",shmid);

    // 3. 获取共享内存
    char *p = (char *)shmat(shmid, NULL, 0);
    ERROR_CHECK(p, NULL, "shmat");
   
    // 删除共享内存(shmid)
    int ret = shmctl(shmid, IPC_RMID, NULL);
    ERROR_CHECK(ret, -1, "shmctl");
    return 0;
}

#if 0
IPC_RMID可以用来从内核删除共享内存段，当删除时，无论此
时有多少进程映射到共享内存段，它都会被标记为待删除，一旦
被标记以后，就无法再建立映射了。当最后一个映射解除时，共
享内存段就真正被移除。
#endif
